package cn.demoncat.util.pay.yeepay.entity;

import cn.demoncat.util.pay.yeepay.constant.YeepayConstant;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 请求参数-交易下单
 *
 * @author 延晓磊
 * @since 2020年10月19日
 */
public class TradeOrderParam {

    /**
     * 订单编号
     *
     * 1、相同订单编号可以提交多次，但只能创建1个支付订单
     * 2、有效期内下单，将返回相同的支付订单，过期时间不变更
     * 3、过期下单，返回错误"该订单不符合重复下单要求||下单时间错误"
     */
    private String orderId;
    // 订单金额（元，0-2位小数）
    private BigDecimal orderAmount;
    // 订单描述/商品信息
    private String goodsName;
    /**
     * 是否分账
     *
     * 1：分账 - 分账后D1转账到目标商户的银行卡
     * 0：不分账 - 支付后D1转账到平台银行卡
     */
    private String fundProcessType;
    /**
     * 订单过期时间（相同订单多次请求，过期时间不变更）
     *
     * 限：指定时间 > 30天（默认）
     */
    private LocalDateTime expiredTime;

    /**
     * 支付完成的跳转地址（标准收银台重定向）
     *
     * 请求方式：GET，返回页面
     * 请求参数：orderId
     */
    private String redirectUrl;
    // 对账备注（部署环境）
    private String memo;

    public String getOrderId() {
        return orderId;
    }

    public void setOrderId(String orderId) {
        this.orderId = orderId;
    }

    public BigDecimal getOrderAmount() {
        return orderAmount;
    }

    public void setOrderAmount(BigDecimal orderAmount) {
        this.orderAmount = orderAmount;
    }

    public String getGoodsName() {
        return goodsName;
    }

    public void setGoodsName(String goodsName) {
        this.goodsName = goodsName;
    }

    /**
     * 是否分账
     *
     * 1：分账 - 分账后D1转账到目标商户的银行卡
     * 0：不分账 - 支付后D1转账到平台银行卡
     */
    public String getFundProcessType() {
        return fundProcessType;
    }

    /**
     * 是否分账
     *
     * 1：分账 - 分账后D1转账到目标商户的银行卡
     * 0：不分账 - 支付后D1转账到平台银行卡
     */
    public void setFundProcessType(String fundProcessType) {
        this.fundProcessType = fundProcessType;
    }

    /**
     * 订单过期时间（相同订单多次请求，过期时间不变更）
     *
     * 限：指定时间 > 30天（默认）
     */
    public LocalDateTime getExpiredTime() {
        return expiredTime;
    }

    /**
     * 订单过期时间（相同订单多次请求，过期时间不变更）
     *
     * 限：指定时间 > 30天（默认）
     */
    public void setExpiredTime(LocalDateTime expiredTime) {
        // 最大时间
        LocalDateTime max = LocalDateTime.now().plusMinutes(YeepayConstant.MAX_PAY_EXPIRE);
        if (expiredTime == null || expiredTime.isAfter(max)) {
            // 最大时间（默认，限制）
            this.expiredTime = max;
        }else{
            // 指定时间
            this.expiredTime = expiredTime;
        }
    }

    public String getRedirectUrl() {
        return redirectUrl;
    }

    public void setRedirectUrl(String redirectUrl) {
        this.redirectUrl = redirectUrl;
    }

    public String getMemo() {
        return memo;
    }

    public void setMemo(String memo) {
        this.memo = memo;
    }
}
